/**
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

{namespace com.google.gerrit.httpd.raw}

{template .Index}
  {@param canonicalPath: ?}
  {@param staticResourcePath: ?}
  {@param gerritInitialData: /** {string} map of REST endpoint to response for startup. */ ?}
  {@param? enabledExperiments: /** A list of enabled experiments for current user. */ ?}
  {@param? assetsPath: ?}  /** {string} URL to static assets root, if served from CDN. */
  {@param? assetsBundle: ?}  /** {string} Assets bundle .html file, served from $assetsPath. */
  {@param? faviconPath: ?}
  {@param? versionInfo: ?}
  {@param? polyfillCE: ?}
  {@param? useGoogleFonts: ?}
  {@param? changeRequestsPath: ?}
  {@param? defaultChangeDetailHex: ?}
  {@param? defaultDiffDetailHex: ?}
  {@param? defaultDashboardHex: ?}
  {@param? dashboardQuery: ?}
  {@param? userIsAuthenticated: ?}
  <!DOCTYPE html>{\n}
  <html lang="en">{\n}
  <meta charset="utf-8">{\n}
  <meta name="description" content="Gerrit Code Review">{\n}
  <meta name="referrer" content="never">{\n}
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">{\n}

  <noscript>
    To use PolyGerrit, please enable JavaScript in your browser settings, and then refresh this page.
  </noscript>

  <script>
    // Disable extra font load from paper-styles
    window.polymerSkipLoadingFontRoboto = true;
    window.CLOSURE_NO_DEPS = true;
    window.DEFAULT_DETAIL_HEXES = {lb}
      {if $defaultChangeDetailHex}
        changePage: '{$defaultChangeDetailHex}',
      {/if}
      {if $defaultDiffDetailHex}
        diffPage: '{$defaultDiffDetailHex}',
      {/if}
      {if $defaultDashboardHex}
        dashboardPage: '{$defaultDashboardHex}',
      {/if}
    {rb};
    window.PRELOADED_QUERIES = {lb}
      {if $userIsAuthenticated and $defaultDashboardHex and $dashboardQuery}
        dashboardQuery: [{for $query in $dashboardQuery}{$query},{/for}],
      {/if}
    {rb};
    {if $canonicalPath != ''}window.CANONICAL_PATH = '{$canonicalPath}';{/if}
    {if $versionInfo}window.VERSION_INFO = '{$versionInfo}';{/if}
    {if $staticResourcePath != ''}window.STATIC_RESOURCE_PATH = '{$staticResourcePath}';{/if}
    {if $assetsPath}window.ASSETS_PATH = '{$assetsPath}';{/if}
    {if $polyfillCE}if (window.customElements) window.customElements.forcePolyfill = true;{/if}
    {if $gerritInitialData}
      // INITIAL_DATA is a string that represents a JSON map. It's inlined here so that we can
      // spare calls to the API when starting up the app.
      // The map maps from endpoint to returned value. This matches Gerrit's REST API 1:1, so the
      // values here can be used as a drop-in replacement for calls to the API.
      //
      // Example:
      // '/config/server/version' => '3.0.0-468-g0757b52a7d'
      // '/accounts/self/detail' => { 'username' : 'gerrit-user' }
      window.INITIAL_DATA = JSON.parse({$gerritInitialData});
    {/if}
    {if $enabledExperiments}
      // ENABLED_EXPERIMENTS is a list of string that contains all enabled experiments
      // for the given user.
      window.ENABLED_EXPERIMENTS = JSON.parse({$enabledExperiments});
    {/if}
  </script>{\n}

  {if $faviconPath}
    <link rel="icon" type="image/x-icon" href="{$canonicalPath}/{$faviconPath}">{\n}
  {else}
    <link rel="icon" type="image/x-icon" href="{$canonicalPath}/favicon.ico">{\n}
  {/if}
  {if $changeRequestsPath}
    {if $defaultChangeDetailHex}
      <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/detail?O={$defaultChangeDetailHex}" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
      {if $userIsAuthenticated}
        <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/edit/?download-commands=true" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
      {/if}
    {/if}
    {if $defaultDiffDetailHex}
      <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/detail?O={$defaultDiffDetailHex}" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
      {if $userIsAuthenticated}
        <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/edit/" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
      {/if}
      <link rel="preload" href="{$staticResourcePath}/bower_components/highlightjs/highlight.min.js" as="script"/>
    {/if}
    <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/comments" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
    <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/robotcomments" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
    {if $userIsAuthenticated}
      <link rel="preload" href="{$canonicalPath}/{$changeRequestsPath}/drafts" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
    {/if}
  {/if}
  {if $userIsAuthenticated and $defaultDashboardHex and $dashboardQuery}
    <link rel="preload" href="{$canonicalPath}/changes/?O={$defaultDashboardHex}&S=0{for $query in $dashboardQuery}&q={$query}{/for}" as="fetch" type="application/json" crossorigin="anonymous"/>{\n}
  {/if}

  {if $useGoogleFonts}
    <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,500,700|Roboto:400,500,700|Open+Sans:400,600,700&display=swap">
  {else}
    // $useGoogleFonts only exists so that hosts can opt-out of loading fonts from fonts.googleapis.com.
    // fonts.css and the woff2 files in the fonts/ directory are only relevant, if $useGoogleFonts is false.

    // @see https://github.com/w3c/preload/issues/32 regarding crossorigin
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-400.woff2"        as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-600.woff2"        as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-700.woff2"        as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-ext-400.woff2"    as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-ext-600.woff2"    as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/opensans-latin-ext-700.woff2"    as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-400.woff2"          as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-500.woff2"          as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-700.woff2"          as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-ext-400.woff2"      as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-ext-500.woff2"      as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-latin-ext-700.woff2"      as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-400.woff2"     as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-500.woff2"     as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-700.woff2"     as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-ext-400.woff2" as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-ext-500.woff2" as="font" type="font/woff2" crossorigin="anonymous">{\n}
    <link rel="preload" href="{$staticResourcePath}/fonts/roboto-mono-latin-ext-700.woff2" as="font" type="font/woff2" crossorigin="anonymous">{\n}

    <link rel="preload" as="style" href="{$staticResourcePath}/styles/fonts.css">{\n}
  {/if}
  <link rel="preload" as="style" href="{$staticResourcePath}/styles/main.css">{\n}

  <script src="{$staticResourcePath}/bower_components/webcomponentsjs/webcomponents-lite.js"></script>{\n}

  // Content between webcomponents-lite and the load of the main app element
  // run before polymer-resin is installed so may have security consequences.
  // Contact your local security engineer if you have any questions, and
  // CC them on any changes that load content before gr-app.js.
  //
  // github.com/Polymer/polymer-resin/blob/master/getting-started.md#integrating
  {if $assetsPath and $assetsBundle}
    <link rel="import" href="{$assetsPath}/{$assetsBundle}">{\n}
  {/if}

  // Now use preloaded resources
  {if $useGoogleFonts}
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,500,700|Roboto:400,500,700|Open+Sans:400,600,700&display=swap">{\n}
  {else}
    <link rel="stylesheet" href="{$staticResourcePath}/styles/fonts.css">{\n}
  {/if}
  <link rel="stylesheet" href="{$staticResourcePath}/styles/main.css">{\n}

  <body unresolved>{\n}
  <gr-app id="app"></gr-app>{\n}

  // Load gr-app.js after <gr-app ...> tag because gr-router expects that
  // <gr-app ...> already exists in the document when script is executed.
  <script src="{$staticResourcePath}/elements/gr-app.js"></script>{\n}
{/template}
